// Copyright (c) 2018, the Dart project authors.  Please see the AUTHORS file
// for details. All rights reserved. Use of this source code is governed by a
// BSD-style license that can be found in the LICENSE file.

import 'package:expect/expect.dart';

List<T?> foo<T>([T? a1, T? a2, T? a3, T? a4, T? a5, T? a6, T? a7]) => [
  a1,
  a2,
  a3,
  a4,
  a5,
  a6,
  a7,
];

class CC {
  List<T?> bar<T, U, V>([T? a1, T? a2, T? a3, T? a4, T? a5, T? a6]) => [
    a1,
    a2,
    a3,
    a4,
    a5,
    a6,
  ];
}

main() {
  // We expect a call$1$5 entry for foo, accessed nowhere else in the program
  // except via the call$5 entry on the instantiation.
  List<int?> Function(int?, int?, int?, int?, int?) f = foo;
  Expect.equals(4, f(1, 2, 3, 4, 5)[3]);

  // We expect a bar$3$4 entry for bar, accessed nowhere else in the program
  // except via the call$4 entry on the instantiation.
  var o = CC();
  List<String?> Function(String?, String?, String?, String?) g = o.bar;
  Expect.equals('abcdnullnull', g('a', 'b', 'c', 'd').join(''));
}
